#include "aibase.h"

////////////////////////////////
//
//IMPORTANT! Write the name of your player
//
#define NAMEPLAYER trol
//
////////////////////////////////

namespace NAMEPLAYER {                  //Do not change this line

  // IMPORTANT! Do not use global variables.

  //////////////////////////////////////////////////
  //
  //   However, it is okay to define const variables, functions,
  // typedefs, or structs/classes. Please do it here:
  //



  //
  //
  //////////////////////////////////////////////////


  //////////////////////////////////////////////////
  //
  //  You must implement the function 'fes_torn'
  //

  struct AIstruct: public AIbase {      //Do not change this line
#include "initializer.h" //Do not change this line

    typedef struct {
	int id_rob;
	int dir;
    }dir_rob;

    vector<dir_rob> *dir_pag;
    vector<dir_rob> *dir_cav;
    
    int cambiaDir(t_robot rob) {
	int dira = -1;
        if (color(rob.i,rob.j+1) == -1) dira = SUD;
        if (color(rob.i+1,rob.j+1) == -1) dira = SE;
        if (color(rob.i+1,rob.j) == -1) dira = OEST;
        if (color(rob.i+1,rob.j-1) == -1) dira = NO;
        if (color(rob.i,rob.j-1) == -1) dira = NORD;
        if (color(rob.i-1,rob.j-1) == -1) dira = NE;
        if (color(rob.i-1,rob.j) == -1) dira = EST;
        if (color(rob.i-1,rob.j+1) == -1) dira = SO;
	return dira;
    }

    void inicia(vector<int>& origen, vector<dir_rob>& destino) {
	int n = origen.size();
	for (int i = 0; i < n; ++i) {
	  destino[i].id_rob = origen[i];
	  destino[i].dir = 1 + random(8);
	}
    }

    void fes_torn() {
      // Escull una direccio inicial entre EST, SE, i SUD.

     // if (torn_actual()==1) dir = 1 + random(3);
      
    
     // int dir_aux = dir;
      //Pintors: cap a dir
      vector<int> pag = pagesos(1); //1: el meu equip
      vector<int> cav = cavallers(1);
      
	dir_pag = new vector<dir_rob>(pag.size());
	inicia(pag,*dir_pag);
	dir_cav = new vector<dir_rob> (cav.size());
	inicia(cav,*dir_cav);
	
     for (int i = 0; i < (int)pag.size(); ++i) {
	int dir_aux = cambiaDir(robot(pag[i]));
	if (dir_aux != -1) (*dir_pag)[i].dir = dir_aux;
	ordena(pag[i], (*dir_pag)[i].dir);
      }

      //Soldats: direccio a l'atzar

      for (int i = 0; i < (int)cav.size(); ++i) {
	int dir_aux = cambiaDir(robot(pag[i]));
	if (dir_aux != -1) (*dir_cav)[i].dir = dir_aux;
	ordena(cav[i], (*dir_cav)[i].dir);
      }
    }

  };

  //
  //
  //////////////////////////////////////////////////  



  AIstruct::Static_Initializer init;    //Do not change this line
};                                      //Do not change this line
